package com.fetaphon.blelibrary.entity.data;

import com.fetaphon.blelibrary.utils.ByteUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * BMS实时数据
 */
public class BmsData {
    private int p1;//总电压 4byte
    private int p2;//总电流 4byte 有符号
    private int p3;//最高单体电压 2byte
    private int p4;//最低单体电压 2byte
    private int p5;//压差 2byte
    private int p6;//功率 2byte
    private int p7;//SOC 1byte
    private int p8;//MOS温度 2byte 有符号
    private int p9;//环境温度 2byte 有符号
    private int p10;//电芯温度个数 1byte
    private List<Integer> p11s;//电芯温度集合 N byte 有符号
    private int p12;//剩余容量 4byte
    private int p13;//告警标志位 4byte
    private int p14;//保护标志位 4byte
    private int p15;//错误标志位 4byte

    public BmsData(byte[] bytes) {
        try {
            p11s = new ArrayList<>();
            byte[] bytes1 = ByteUtils.subBytes(bytes, 0, 4);
            byte[] bytes2 = ByteUtils.subBytes(bytes, 4, 4);
            byte[] bytes3 = ByteUtils.subBytes(bytes, 8, 2);
            byte[] bytes4 = ByteUtils.subBytes(bytes, 10, 2);
            byte[] bytes5 = ByteUtils.subBytes(bytes, 12, 2);
            byte[] bytes6 = ByteUtils.subBytes(bytes, 14, 2);
            byte[] bytes7 = ByteUtils.subBytes(bytes, 16, 1);
            byte[] bytes8 = ByteUtils.subBytes(bytes, 17, 2);
            byte[] bytes9 = ByteUtils.subBytes(bytes, 19, 2);
            byte[] bytes10 = ByteUtils.subBytes(bytes, 21, 1);
            p1 = ByteUtils.byteToInt(bytes1);
            p2 = ByteUtils.byteToInt(bytes2);
            p3 = ByteUtils.byteToInt(bytes3);
            p4 = ByteUtils.byteToInt(bytes4);
            p5 = ByteUtils.byteToInt(bytes5);
            p6 = ByteUtils.byteToInt(bytes6);
            p7 = ByteUtils.byteToInt(bytes7);
            p8 = ByteUtils.byteToIntSign(bytes8);
            p9 = ByteUtils.byteToIntSign(bytes9);
            p10 = ByteUtils.byteToInt(bytes10);
            int n = p10 * 2;
            byte[] bytes11 = ByteUtils.subBytes(bytes, 22, n);
            byte[][] bs = ByteUtils.splitBytes(bytes11, 2);
            for (byte[] b : bs) {
                p11s.add(ByteUtils.byteToIntSign(b));
            }
            byte[] bytes12 = ByteUtils.subBytes(bytes, n + 22, 1);
            byte[] bytes13 = ByteUtils.subBytes(bytes, n + 23, 4);
            byte[] bytes14 = ByteUtils.subBytes(bytes, n + 27, 4);
            byte[] bytes15 = ByteUtils.subBytes(bytes, n + 31, 4);
            p12 = ByteUtils.byteToInt(bytes12);
            p13 = ByteUtils.byteToInt(bytes13);
            p14 = ByteUtils.byteToInt(bytes14);
            p15 = ByteUtils.byteToInt(bytes15);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public int getP1() {
        return p1;
    }

    public long getP2() {
        return p2;
    }

    public int getP3() {
        return p3;
    }

    public int getP4() {
        return p4;
    }

    public int getP5() {
        return p5;
    }

    public int getP6() {
        return p6;
    }

    public int getP7() {
        return p7;
    }

    public int getP8() {
        return p8;
    }

    public int getP9() {
        return p9;
    }

    public int getP10() {
        return p10;
    }

    public List<Integer> getP11s() {
        return p11s;
    }

    public int getP12() {
        return p12;
    }

    public int getP13() {
        return p13;
    }

    public int getP14() {
        return p14;
    }

    public int getP15() {
        return p15;
    }
}
